package com.gushenge.core.requests

import android.util.Log
import com.gushenge.core.base.Base
import com.gushenge.core.beans.*
import com.gushenge.core.dao.GlobalConsts
import com.gushenge.core.dao.MMKVConsts
import com.gushenge.core.dao.MMKVConsts.uid
import com.gushenge.core.httpSign
import com.gushenge.core.time
import com.gushenge.core.toast
import com.rxlife.coroutine.RxLifeScope
import rxhttp.onErrorReturn
import rxhttp.toClass
import rxhttp.wrapper.param.RxHttp

object GameRequest {
    fun getGameTask(id: String, listener: () -> Unit) {
        RxLifeScope().launch {
            val result = RxHttp.postForm(GlobalConsts.GetGameTask)
                .add("member_id", MMKVConsts.sub)
                .add("uid", MMKVConsts.uid)
                .add("id", id)
                .toClass<Code<String>>()
                .await()
            if (result.code == 1) {
                listener()
            } else {
                result.message.toast()
            }
        }
    }

    fun getGameTask(p: Int, listener: Codes<GameTaskBean>?.() -> Unit) {
        RxLifeScope().launch {
            val result = RxHttp.postForm(GlobalConsts.GameTask)
                .add("member_id", MMKVConsts.sub)
                .add("uid", MMKVConsts.uid)
                .add("p", p)
                .add("keyword", "")
                .add("do", 1)
                .toClass<Codes<GameTaskBean>>()
                .await()
            if (result.code == 1) {
                result.listener()
            } else {
                result.message.toast()
                result.listener()
            }
        }
    }

    fun getGameTaskReward(id: String, listener: () -> Unit) {
        RxLifeScope().launch {
            val result = RxHttp.postForm(GlobalConsts.GetGameTaskReward)
                .add("member_id", MMKVConsts.sub)
                .add("uid", MMKVConsts.uid)
                .add("id", id)
                .toClass<Code<String>>()
                .await()
            if (result.code == 1) {
                listener()
            } else {
                result.message.toast()
            }
        }
    }

    //0 正常交易列表1 一元买号列表  （sort 0 默认排序 1 价格高到低 2 价格低到高）
    fun getAccountList(
        huishouzhanghao: Int,
        system: Int,
        p: Int,
        smoney: String,
        emoney: String,
        keyword: String,
        sort: Int,
        listener: Codes<Deal1>?.() -> Unit
    ) {
        RxLifeScope().launch {
            val result = RxHttp.postForm(GlobalConsts.AccountList)
                .add("member_id", MMKVConsts.sub)
                .add("uid", MMKVConsts.uid)
                .add("smoney", smoney)
                .add("emoney", emoney)
                .add("keyword", keyword)
                .add("system", system)
                .add("sort", sort)
                .add("p", p)
                .add("huishouzhanghao", huishouzhanghao)
                .toClass<Codes<Deal1>>()
                .await()
            if (result.code == 1) {
                result.listener()
            } else {
                result.message.toast()
                result.listener()
            }
        }
    }

    fun fenlei(listener: ArrayList<Sort>.() -> Unit) {
        RxLifeScope().launch {
            val result = RxHttp.get(GlobalConsts.GAME_FenLei)
                .add("member_id", MMKVConsts.sub)
                .add("language", MMKVConsts.language)
                .toClass<Codes<Sort>>()
                .await()
            if (result.code == 1) {
                result.data?.listener()
            } else {
                result.message.toast()
            }
        }
    }


    fun chosen(p: Int, type: Int = 0, listener: Chosen.() -> Unit) {
        RxLifeScope().launch {
            val result = RxHttp.get(GlobalConsts.GAME_CHOSEN)
                .add("fenlei_id", type)
                .add("type", type)
                .add("p", p)
                .add("member_id", MMKVConsts.sub)
                .add("language", MMKVConsts.language)
                .toClass<Code<Chosen>>()
                .await()
            if (result.code == 1) {
                result.data?.listener()
            } else {
                result.message.toast()
            }
        }
    }

    fun chosenGM(p: Int, type: Int = 0, listener: BaseGameBeans.() -> Unit) {
        RxLifeScope().launch {
            val result = RxHttp.get(GlobalConsts.GM_GAME_LIST)
                .add("type", type)
                .add("p", p)
                .toClass<BaseGameBeans>()
                .await()
            if (result.code == 1) {
                result.listener()
            } else {
                result.message.toast()
            }
        }
    }

    fun yuyue(listener: (ArrayList<YuYue>) -> Unit) {
        RxLifeScope().launch {
            val result = RxHttp.get(GlobalConsts.GAME_YUYUE)
                .add("uid", MMKVConsts.uid)
                .add("t", time)
                .add("sign", httpSign(MMKVConsts.uid))
                .add("member_id", MMKVConsts.sub)
                .add("language", MMKVConsts.language)
                .toClass<Codes<YuYue>>()
                .await()
            if (result.code == 1) {
                result.data.let {
                    listener(it)
                }
            } else {
                result.message.toast()
            }
        }
    }

    fun yuyueAdd(gid: String, listener: () -> Unit) {
        RxLifeScope().launch {
            val result = RxHttp.get(GlobalConsts.GAME_YUYUE_ADD)
                .add("uid", MMKVConsts.uid)
                .add("t", time)
                .add("sign", httpSign(MMKVConsts.uid))
                .add("gid", gid)
                .add("member_id", MMKVConsts.sub)
                .add("language", MMKVConsts.language)
                .toClass<Code<YuYue>>()
                .await()
            if (result.code == 1) {
                listener()
            } else {
                result.message.toast()
            }
        }
    }

    /*礼包中心*/
    fun otherSort(type: String, p: Int, listener: (p: Int, max: Int, data: ArrayList<Game>) -> Unit) {
        RxLifeScope().launch {
            val result = RxHttp.get(GlobalConsts.SORT_V3)
                .add("type", type)
                .add("p", p)
                .add("member_id", MMKVConsts.sub)
                .add("language", MMKVConsts.language)
                .toClass<Codes<Game>>()
//                    .onErrorReturn {
//                        return@onErrorReturn  Codes(0, arrayListOf(),it.toString())
//                    }
                .await()
            if (result.code == 1) {
                listener(result.p, result.max_p, result.data)
            } else {
                result.message.toast()
            }
        }
    }

    /*礼包中心*/
    fun gameGift(gid: String, position: String, listener: GameGift.() -> Unit) {
        RxLifeScope().launch {
            val result = RxHttp.get(GlobalConsts.GAME_GIFT)
                .add("gid", gid)
                .add("uid", MMKVConsts.uid)
                .add("t", time)
                .add("sign", httpSign(MMKVConsts.uid))
                .add("member_id", MMKVConsts.sub)
                .add("vip", position)
                .add("language", MMKVConsts.language)
                .toClass<Code<GameGift>>()
//                    .onErrorReturn {
//                        return@onErrorReturn  Code(0, GameGift(),it.toString())
//                    }
                .await()
            if (result.code == 1) {
                result.data?.listener()
            }
        }
    }

    /*礼包中心*/
    fun gameDiscuss(gid: String, p: Int, listener: (p: Int, max: Int, data: ArrayList<GameDiscuss>) -> Unit) {
        RxLifeScope().launch {
            val result = RxHttp.get(GlobalConsts.GAME_DISCUSS)
                .add("id", gid)
                .add("uid", MMKVConsts.uid)
                .add("t", time)
                .add("member_id", MMKVConsts.sub)
                .add("sign", httpSign(uid))
                .add("p", p)
                .add("language", MMKVConsts.language)
                .toClass<Codes<GameDiscuss>>()
//                    .onErrorReturn {
//                        return@onErrorReturn  Codes(0, arrayListOf(),it.toString())
//                    }
                .await()
            if (result.code == 1) {
                listener(result.p, result.max_p, result.data)
            } else {
                result.message.toast()
            }
        }
    }


    /*分类*/
    fun sort(listener: (data: ArrayList<Sort>) -> Unit) {
        RxLifeScope().launch {
            val result = RxHttp.get("${Base.BASEURL}/?ct=app&ac=fenlei")
                .add("language", MMKVConsts.language)
                .add("member_id", MMKVConsts.sub)
                .toClass<Codes<Sort>>()
                .await()
            if (result.code == 1) {
                listener(result.data)
            } else {
                result.message.toast()
            }
        }
    }

    fun gmSort(listener: (data: ArrayList<Sort>) -> Unit) {
        RxLifeScope().launch {
            val result = RxHttp.get(GlobalConsts.GM_GAME_CLASSIFY)
                .add("type",1)
                .toClass<Codes<Sort>>()
                .await()
            if (result.code == 1) {
                listener(result.data)
            } else {
                result.message.toast()
            }
        }
    }

    /*礼包中心*/
    fun groupChat(
        type: Int,
        p: Int,
        listener: (p: Int, max: Int, data: ArrayList<GroupChatItem>, tuijian: ArrayList<GroupChatItem>) -> Unit
    ) {
        RxLifeScope().launch {
            val result = RxHttp.get("${Base.BASEURLV3}/?ct=app&ac=qun_tuijian")
                .add("type", type)
                .add("uid", MMKVConsts.uid)
                .add("p", p)
                .add("member_id", MMKVConsts.sub)
                .add("language", MMKVConsts.language)
                .toClass<Code<GroupChat>>()
//                    .onErrorReturn {
//                        return@onErrorReturn  Code(0, GroupChat(),it.toString())
//                    }
                .await()
            if (result.code == 1) {
                result.data?.let {
                    listener(it.p, it.max_p, it.list, it.tuijian)
                }
            } else {
                result.message.toast()
            }
        }
    }

    fun addGroup(id: String, listener: String.() -> Unit) {
        RxLifeScope().launch {
            val result = RxHttp.get("${Base.BASEURLV3}/?ct=app&ac=join_qun")
                .add("id", id)
                .add("uid", MMKVConsts.uid)
                .add("t", time)
                .add("member_id", MMKVConsts.sub)
                .add("sign", httpSign(uid))
                .add("language", MMKVConsts.language)
                .toClass<Code<String>>()
                .await()
            if (result.code == 1) {
                listener(result.data!!)
            } else {
                result.message.toast()
            }
        }
    }

    fun server(p: Int, type: Int = 0, listener: (p: Int, max: Int, data: ArrayList<ServerV3>) -> Unit) {
        RxLifeScope().launch {
            val result = RxHttp.get("${Base.BASEURLV3}/?ct=app&ac=servers")
                .add("p", p)
                .add("type", type)
                .add("member_id", MMKVConsts.sub)
                .add("language", MMKVConsts.language)
                .toClass<Codes<ServerV3>>()
                .await()
            if (result.code == 1) {
                listener(result.p, result.max_p, result.data)
            } else {
                result.message.toast()
            }
        }
    }

    /**
     * 游戏详情得群聊
     */
    fun genGameQun(id: String?, listener: QunInfo?.() -> Unit) {
        RxLifeScope().launch {
            val result = RxHttp.get("${Base.BASEURLV3}/?ct=app2022&ac=game_qun")
                .add("id", id)
                .add("uid", MMKVConsts.uid)
                .add("t", time)
                .add("member_id", MMKVConsts.sub)
                .add("sign", httpSign(uid))
                .add("language", MMKVConsts.language)
                .toClass<Code<QunInfo>>()
                .await()
            if (result.code == 1) {
                listener(result.data)
            } else {
//                result.message.toast()
            }
        }
    }

    /**
     * 退出群聊
     */
    fun exitGameQun(id: String?, listener: () -> Unit) {
        RxLifeScope().launch {
            val result = RxHttp.get("${Base.BASEURLV3}/?ct=app2022&ac=esc_qun")
                .add("id", id)
                .add("uid", MMKVConsts.uid)
                .add("t", time)
                .add("member_id", MMKVConsts.sub)
                .add("sign", httpSign(uid))
                .add("language", MMKVConsts.language)
                .toClass<Code<String>>()
                .await()
            if (result.code == 1) {
                listener()
            } else {
                result.message.toast()
            }
        }
    }

    // 云游戏列表
    fun getCloudGame(listener: ArrayList<CloudGameBean>.() -> Unit) {
        RxLifeScope().launch {
            val result = RxHttp.get("${Base.BASEURLV3}/?ct=app2022&ac=yunphone")
                .add("uid", MMKVConsts.uid)
                .add("t", time)
                .add("member_id", MMKVConsts.sub)
                .add("sign", httpSign(uid))
                .add("language", MMKVConsts.language)
                .toClass<Codes<CloudGameBean>>()
                .await()
            if (result.code == 1) {
                listener.invoke(result.data)
            } else {
                result.message.toast()
            }
        }
    }

    // 云游戏状态
    fun getCloudGameState(id: String, listener: () -> Unit) {
        RxLifeScope().launch {
            val result = RxHttp.get("${Base.BASEURLV3}/?ct=app2022&ac=yunphone_status")
                .add("uid", MMKVConsts.uid)
                .add("t", time)
                .add("id", id)
                .add("member_id", MMKVConsts.sub)
                .add("sign", httpSign(uid))
                .add("language", MMKVConsts.language)
                .toClass<Code<String>>()
                .await()
            if (result.code == 1) {
                listener()
            } else {
                result.message.toast()
            }
        }
    }

    fun gameDetailFenLei(gid: String?, listener: ArrayList<IndexTop>.() -> Unit) {

        RxLifeScope().launch {
            val result = RxHttp.get("${Base.BASEURLV3}/?ct=shequ&ac=game_biaoqian")
                .add("uid", MMKVConsts.uid)
                .add("t", time)
                .add("gid", gid)
                .add("member_id", MMKVConsts.sub)
                .add("sign", httpSign(uid))
                .add("language", MMKVConsts.language)
                .toClass<Codes<IndexTop>>()
                .await()
            if (result.code == 1) {
                listener(result.data)
            } else {
                result.message.toast()
            }
        }
    }

    // 获取物品列表
    fun getGameGoods(gid: String, key: String? = null, listener: ArrayList<GameGoodsModel>.() -> Unit) {
        RxLifeScope().launch {
            val result = RxHttp.get(GlobalConsts.GM_GAME_GOODS)
                .add("id", gid)
                .add("key", key)
                .toClass<Codes<GameGoodsModel>>()
                .await()
            if (result.code == 1) {
                listener(result.list)
            } else {
                result.msg.toast()
            }
        }
    }
}